﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.SIG.Modelo;

namespace Libreria.SIG.Negocio
{
    public class MenuNegocio
    {
        public List<Menu> consultarMenus(String cadenaDeConexion)
        {
            Menu listaDeMenus = new Menu(cadenaDeConexion);
            return listaDeMenus.consultar();
        }


        public List<Menu> consultarMenus(Int32 codigo, String cadenaDeConexion)
        {
            List<Menu> menus = new List<Menu>();
            Menu listaDeMenus = new Menu(cadenaDeConexion);
            if (codigo > 0)
            {
                menus.Add(listaDeMenus.consultarPorCodigo(codigo));
            }
            else
            {
                menus = listaDeMenus.consultar();
            }
            return menus;
        }


        public List<Menu> consultarMenusVigentes(int restriccion, String cadenaDeConexion)
        {
            Menu listaDeMenusVigentes = new Menu(cadenaDeConexion);
            List<Menu> menus = new List<Menu>();
            menus = listaDeMenusVigentes.consultarVigentes(restriccion);
            return menus;
        }


        public void eliminarMenu(Int32 Codigo, String cadenaDeConexion,out String alerta)
        {
            List<Tarifa> Lista = new List<Tarifa>();
            alerta = "";
            Tarifa tarifas = new Tarifa(cadenaDeConexion);
            tarifas.Codigo = null;
            tarifas.DescripcionTarifa = null;
            tarifas.ValorTarifa = null;
            tarifas.PerfilUsuarioTarifa = null;
            tarifas.CodigoMenu = Codigo;
            Lista = tarifas.consultar();

            if (Lista.Count() > 0)
            {
                alerta = "No se permite eliminar registros, porque tiene tarifas asociadas.";
            }
            else
            {
                Menu MenuAEliminar = new Menu(cadenaDeConexion);
                MenuAEliminar.Codigo = Codigo;
                MenuAEliminar.FechaMenu = new DateTime();
                MenuAEliminar.Nombre = null;
                MenuAEliminar.InstructorGastronomia = null;
                MenuAEliminar.CategoriaMenu = null;
                MenuAEliminar.eliminar();
            }
        }

        public void actualizarMenu(Int32 Codigo, DateTime FechaMenu, String Nombre, String InstructorGastronomia, Int32 CategoriaMenuConvertido, String cadenaDeConexion)
        {
            Menu MenuAActualizar = new Menu(cadenaDeConexion);
            MenuAActualizar.Codigo = Codigo;
            MenuAActualizar.FechaMenu = FechaMenu;
            MenuAActualizar.Nombre = Nombre;
            MenuAActualizar.InstructorGastronomia = InstructorGastronomia;
            MenuAActualizar.CategoriaMenu = CategoriaMenuConvertido;
            MenuAActualizar.actualizar();
        }

        public void crearMenu(Int32 Codigo, DateTime FechaMenu, String Nombre, String InstructorGastronomia, Int32 CategoriaMenu, String cadenaDeConexion)
        {
            crearMenu(Codigo, FechaMenu, Nombre, InstructorGastronomia, CategoriaMenu, string.Empty, cadenaDeConexion);
        }

        public void crearMenu(Int32 Codigo, DateTime FechaMenu, String Nombre, String InstructorGastronomia, Int32 CategoriaMenu, String Justificacion, String cadenaDeConexion)
        {
            Menu MenuACrear = new Menu(cadenaDeConexion);
            MenuACrear.Codigo = Codigo;
            MenuACrear.FechaMenu = FechaMenu.Date;
            MenuACrear.Nombre = Nombre;
            MenuACrear.InstructorGastronomia = InstructorGastronomia;
            MenuACrear.CategoriaMenu = CategoriaMenu;
            MenuACrear.Justificacion = Justificacion;
            MenuACrear.crear();
        }

        public List<Menu> ConsultaMenusVigentesPorFecha(DateTime FechaMenu, String cadenaDeConexion) {
            Menu listaDeMenus = new Menu(cadenaDeConexion);
            listaDeMenus.CategoriaMenu = null;
            listaDeMenus.Codigo = null;
            listaDeMenus.InstructorGastronomia = null;
            listaDeMenus.Nombre = null;
            listaDeMenus.FechaMenu = FechaMenu;

            List<Menu> resultado = new List<Menu>();
            List<Menu> resTemp = listaDeMenus.consultar();
            if (FechaMenu == DateTime.MinValue)
            {
                foreach (Object registro in resTemp)
                {
                    if ((((Menu)registro).FechaMenu > DateTime.Now) || ((((Menu)registro).FechaMenu.ToShortDateString() == DateTime.Now.ToShortDateString()) && (DateTime.Now <= new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 9, 0, 0))))
                    {
                        resultado.Add((Menu)registro);
                    }
                }
            }
            else
            {
                resultado = resTemp;
            }

            return resultado;
        }

        public List<Menu> ConsultaMenusPorFecha(DateTime FechaMenu, String cadenaDeConexion)
        {
            Menu listaDeMenus = new Menu(cadenaDeConexion);
            listaDeMenus.CategoriaMenu = null;
            listaDeMenus.Codigo = null;
            listaDeMenus.InstructorGastronomia = null;
            listaDeMenus.Nombre = null;
            listaDeMenus.FechaMenu = FechaMenu;

            List<Menu> resultado = new List<Menu>();
            List<Menu> resTemp = listaDeMenus.consultar();

            return resTemp;
        }

    }
}
